/*********************************************************
Interfaccia utente del compressore lz78
author: Antona Maria Gabriella,
	Di Franco Carmelo

Comandi:

./lz78 -compress(-c) file (-opt)filedest
./lz78 -decompress(-d) file filedest
./lz78 -help
	
*********************************************************/
#include "common.h"
#include "compressore.h"
#include "decompressore.h"

int main(int argn,char** arg){
	
	enum { compress, decompress, help, error} command;
	command = help;
	
	const char* command_error = "Too many arguments - type help(?) for info\n\n";
	const char* command_error1 = "Comando Errato - Digita help(?) per informazioni\n\n";
	char *dest_file = NULL;	
	char *source_file = NULL;
	int ret = 0;

	if(argn > 3 || argn < 2){
		printf("%s",command_error);
		exit(1);
	}
	if(strcmp(arg[1],"compress") == 0)
		command = compress;
	else if(strcmp(arg[1],"c") == 0)
		command = compress;
	else if(strcmp(arg[1],"decompress") == 0)
		command = decompress;
	else if(strcmp(arg[1],"d") == 0)
		command = decompress;
	else if(strcmp(arg[1],"help") == 0)
		command = help;
	else if(strcmp(arg[1],"?") == 0)
		command = help;
	else command= error;


	switch(command){
		case compress : 
			
			source_file = strdup(arg[2]);	
			dest_file = strdup(arg[2]);
			strcat (dest_file,".gc");			

			printf("\nCompressione di %s in %s \n",source_file,dest_file);			
			ret = lzcompress(source_file,dest_file);
			if (ret==0)
				printf("Compressione Effettuata\n\n");
			else {
				fprintf(stderr,"Si è verificato un errore durante la compressione del file.\n");
				fprintf(stderr,"Impossibile comprimere.\n");			
			}
			free(source_file);
			free(dest_file);	
			break;
		case decompress :
		
			source_file = strdup(arg[2]);
			printf("%s", source_file);
			printf("\nDecompressione di %s in corso... \n",source_file);			
			ret = lzdecompress(source_file);
			if (ret==0)
				printf("Decompressione Effettuata\n\n");
			else {
				fprintf(stderr, "Si sono verificati degli errori durante la decompressione.\n");
				fprintf(stderr,"Impossibile decomprimere.\n");				
			}	
			free(source_file);	
			break;
		case help : 
			printf("Digitare:\n");
			printf("c/compress <nome_file> per comprimere un file\n");
			printf("d/decompress <nome_file per decomprimere un file\n>");
			break;

		default:
			printf("help: %s, %s, %s\n", arg[0], arg[1], arg[2]);
			printf("%s",command_error1);
			ret=-1;
			break;
		}

	if (ret ==-1) return -1;

	return 0;
}

